Этапы создания программы на C++. Роли препроцессора, компилятора и компоновщика при подготовке исполняемого файла.
Процедурная и объектная декомпозиция.
Библиотека и ее состав. Статические и динамические библиотеки.
Понятие парадигмы программирования. Классификации парадигм. Место парадигмы в разработке.
Императивная парадигма и ее виды.
Декларативная парадигма и ее виды.
Выполнение императивных и декларативных программ.
Сцепление и связанность проектов. Типы кода с точки зрения связанности и сцепления.
Пространство имен. Глобальное, вложенное и встроенное пространство имен.
Объектно-ориентированное проектирование и программирование. Принципы объектно-ориентированного программирования.
Абстрагирование, инкапсуляция, модульность и иерархия с точки зрения объектно-ориентированного программирования.
Объект, прототип и класс.
Скалярные и составные типы C++.
Переменная и объект. Классы и структуры.
Спецификация класса. Понятие интерфейса.
Управление доступом и ограничения для структур, классов и объединений.
Специальные члены класса: конструкторы, деструкторы и указатель this.
Инкапсуляция. Правила доступа к элементам класса.
Присваивание и инициализация. Инициализация в конструкторе. Списки инициализаторов.
Понятие дружественности. Дружественные классы и функции классы.
Перегрузка функций и способы её осуществления. Перегрузка методом класса унарных и бинарных операций.
Перегрузка внешней функцией унарных и бинарных операций. Перегрузка потоков ввода/вывода.
Перегрузка операций присваивания и преобразования типа. Перегрузка new и delete.
Ассоциация, композиция и агрегация.
Понятие наследования. Виды и дерево наследования. Стратегии наследования.
Ключи наследования и правило доступа к членам производного класса.
Правила наследования для перегрузок операций и специальных членов и методов класса.
Виртуальные функции и таблица виртуальных функций.
Абстрактные классы и интерфейсы. Виртуальные конструкторы и деструкторы.
Понятие шаблона функции и шаблонной функции. Выведение типов шаблонных аргументов. Специализация шаблона функции. Примеры шаблонов функций.
Понятие шаблона классов и шаблонного класса. Параметры шаблонов классов. Специализация шаблона класса. Примеры шаблонов классов.
Частичная специализация шаблона функций и класса.
Множественное наследование: виртуальные базовые классы при множественном наследовании.
Множественное наследование: разрешение неоднозначности имен и механизм доминирования.
Понятие полиморфизма. Раннее и позднее связывание.
Параметрический полиморфизм. Полиморфизм через наследование. Виртуальные функции.
Традиционные механизмы обработки ошибок. Механизм исключений.
Приведение типов и разновидности выражений для приведения типов.
Паттерны проектирования. Связь архитектуры приложения и паттернов проектирования. Виды паттернов проектирования.
Особенности и методы тестирования объектно-ориентированных программных систем.